#include "commerrno.h"
#include "CStatusCfg.h"

int CStatusCfg::AddConfig(CStatusCfgData& stCfgData)
{
    if (!stCfgData.IsValidID())
    {
        return ERROR_STATUS_OVER_RESID;
    }
    
    int iIndex = _stStatusCfgHash.HashFind(stCfgData.GetResID());
    if (iIndex >= 0)
    {
        return ERROR_STATUS_REPEAT_RESID;
    }

    iIndex = _stStatusCfgHash.HashAlloc(stCfgData.GetResID());
    if (iIndex < 0)
    {
        return RET_SYSTEM_FAIL;
    }

    _stStatusCfgHash[iIndex] = stCfgData;

    return 0;
}

int CStatusCfg::FindConfig(int iResID)
{
    if (iResID <= 0)
    {
        CT_WARNING(("ResID(%d) invalid!", iResID));
        return -1;//因为返回下标 所以这里必须返回负数
    }

    int iIndex = _stStatusCfgHash.HashFind(iResID);
    if (iIndex < 0)
    {
        CT_WARNING(("ResID(%d) config empty!", iResID));
        return -1;//因为返回下标 所以这里必须返回负数
    }

    return iIndex;
}

CStatusCfgData& CStatusCfg::GetConfig(int iIndex)
{
    return _stStatusCfgHash[iIndex];
}

int CStatusCfg::AddGroupConfig(CStatusGroup& stGroupData)
{
    if (!stGroupData.IsValidID())
    {
        return ERROR_STATUS_GROUP_OVER_RESID;
    }
    
    int iIndex = _stStatusGroupHash.HashFind(stGroupData.GetResID());
    if (iIndex >= 0)
    {
        return ERROR_STATUS_GROUP_REPEAT_RESID;
    }

    iIndex = _stStatusGroupHash.HashAlloc(stGroupData.GetResID());
    if (iIndex < 0)
    {
        return RET_SYSTEM_FAIL;
    }

    _stStatusGroupHash[iIndex] = stGroupData;

    return 0;
}

int CStatusCfg::FindGroupConfig(int iResID)
{
    if (iResID <= 0)
    {
        CT_WARNING(("Group resID(%d) invalid!", iResID));
        return -1;//因为返回下标 所以这里必须返回负数
    }

    int iIndex = _stStatusGroupHash.HashFind(iResID);
    if (iIndex < 0)
    {
        CT_WARNING(("Group resID(%d) config empty!", iResID));
        return -1;//因为返回下标 所以这里必须返回负数
    }

    return iIndex;
}

CStatusGroup& CStatusCfg::GetGroupConfig(int iIndex)
{
    return _stStatusGroupHash[iIndex];
}

